package com.flyqiu.common.dict;

import com.alibaba.fastjson2.JSONObject;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.util.List;

/**
 * 字典数据类，用于表示字典中的数据项或分组。
 */
@Data
@Schema(name = "FlyQiuDicData", description = "字典数据")
public class FlyQiuDicData implements Dict<Object> {
    /**
     * 构造一个具有基本属性的字典数据项。
     */
    private String label; // 字典名称 或者分组名称
    private Object value; // 字典值
    private String desc; // 描述信息

    /**
     * 分组属性，用于将字典数据项进行分组。
     */
    private List<FlyQiuDicData> groups;

    private int order = 999; // 排序顺序，默认为999
    private boolean disabled; // 是否禁用，默认为false
    private JSONObject extProp; // 扩展属性，使用JSON对象存储


    // 默认构造函数
    public FlyQiuDicData() {
    }

    /**
     * 构造一个具有基本属性和扩展属性的字典数据项。
     *
     * @param label   字典名称或分组名称
     * @param value   字典值
     * @param extProp 扩展属性，一个JSON对象
     */
    public FlyQiuDicData(String label, Object value, JSONObject extProp) {
        this.label = label;
        this.value = value;
        this.extProp = extProp;
    }

    /**
     * 构造一个具有基本属性的字典数据项。
     *
     * @param label 字典名称或分组名称
     * @param value 字典值
     */
    public FlyQiuDicData(String label, Object value) {
        this.label = label;
        this.value = value;
    }

    /**
     * 构造一个具有基本属性和禁用状态的字典数据项。
     *
     * @param label    字典名称或分组名称
     * @param value    字典值
     * @param disabled 是否禁用
     */
    public FlyQiuDicData(String label, Object value, boolean disabled) {
        this.label = label;
        this.value = value;
        this.disabled = disabled;
    }


    @Override
    public String getGroupKey() {
        return String.valueOf(value);
    }

    @Override
    public int getGroupOrder() {
        return order;
    }

    @Override
    public String getGroupLabel() {
        return label;
    }
}
